All customers

Oxbow

Payroll for independent restaurants
Boise, ID

Two staging clusters, replaced by a $400 cap.

Oxbow ran two always-on staging clusters for $2,140 a month. The platform team swapped them for previews that sleep, set a $400 cap, and has averaged $312 since.

Sam Rivera talking with two colleagues at a small table in the Oxbow office
average monthly bill, down from $2,140 for two clusters
$312
of preview time spent asleep
86%
median teardown after merge
2m 05s

Paying for staging at 3:00 AM

Oxbow runs payroll for independent restaurants: hours, tips, tax filings, and the direct deposit that has to land on Friday. Its 64 engineers in Boise ship Go services to GCP with Helm, and for three years they tested them on two staging clusters, because one was never enough for the payroll team and the tips team at the same time.

Both clusters ran all day, every day, and together they cost $2,140 a month. When Sam Rivera took over the platform team he pulled the request logs. The clusters had served traffic during 14% of the hours they were up.

"We were paying for staging at 3:00 AM on a Sunday," Rivera says. "Nobody at Oxbow is testing payroll at 3:00 AM on a Sunday."

They had also drifted apart. The second cluster carried a feature-flag setting nobody remembered making, and "it works on b" had become a thing people said in review.

What they changed

Tovah Lindqvist, a platform engineer, did the migration in the first two weeks of February. The Helm chart already existed, so preview.from pointed at it, and the runner went into Oxbow's own GCP project. Employee names, Social Security numbers and bank account numbers are masked there, before a preview reads the nightly snapshot.

preview:
  from: charts/oxbow
  sleep_after: 30m
  teardown: on_merge
  budget:
    monthly_usd: 400

The $400 was a guess: about a fifth of the old bill, which felt like a number finance would notice. The first week tested it. An engineer had pointed an uptime monitor at a preview link to watch a long import, and forgot about it. The preview stayed awake for four days. It had cost about $18 by the time Lindqvist saw it on the spend page, which she points out is the reason to have a spend page. The monitor now watches production, where it belongs.

For a month the old clusters stayed up as a fallback. Nobody deployed to either of them after the second week, and both were deleted on March 9.

What happened

  • Oxbow's bill has averaged $312 a month since, against $2,140 for the two clusters. The highest month, $371, was the one with the tip-pooling rewrite.
  • Previews spend 86% of their time asleep. Engineers stopped noticing the wake months ago.
  • Median teardown is 2m 05s after merge, including the database volume.

The drift is gone as well, because there is nothing left to drift. Every preview is built from the chart on its own branch and seeded from last night's snapshot, so a setting that is not in the pull request is not in the preview.

Rivera is careful about what the cap does and does not do. "The cap is not why the bill is low," he says. "The bill is low because nothing runs when nobody is looking. The cap is how I explained it to finance." Oxbow moved to an annual commitment in August. The rates are on the pricing page, and the Helm setup Lindqvist followed is in the docs.

We set the cap at $400 a month and haven't come close. Previews sleep when nobody is looking at them.

Sam Rivera Sam Rivera Head of Platform, Oxbow
Team
64 engineers
Stack
Go · Postgres · Redis · Helm on GCP

Give the next pull request a link.

Connect a repository and Canary builds your first preview while you watch the log. The first 500 preview-hours are free.

Two engineers reviewing a preview on a laptop
pr-482 torn down Merged into main · 14:05